package VIEWS;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Font;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;

import CONTROLLERS.DichVuControllers;
import CONTROLLERS.HoaDonControllers;
import CONTROLLERS.UsersControllers;
import ModelEntityFW.DichVuEntitys;
import ModelEntityFW.HoaDonEntitys;
import ModelEntityFW.UserEntitys;
import Ultils.Controls;

import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.ActionEvent;

public class frmDichVu extends JFrame {

	private JPanel contentPane;
	private JTable jTLoadDataU;
	private static Connection m_objConnection;
	private DichVuControllers m_objDichVuController;
	private static UserEntitys m_objSecurityContext;
	private static frmDichVu fdichvu;
	private DefaultTableModel objDTM;
	private DichVuEntitys m_objDichVuEntity;
	private static boolean bFlag = false;
	private JTable table;

	/**
	 * Launch the application.
	 */
	/**
	 * Create the frame.
	 */
	public frmDichVu(Connection objConnection, UserEntitys objSecurity) {
		// Khởi tạo đối tượng
		m_objConnection = objConnection;
		m_objSecurityContext = objSecurity;
		m_objDichVuEntity = new DichVuEntitys();
		objDTM = new DefaultTableModel();
		jTLoadDataU = new JTable();
		setTitle("Dịch vụ bệnh viện");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 805, 516);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		JButton btnThem = new JButton("Thêm dịch vụ");
		btnThem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				m_objDichVuEntity.setbFlag(false);
				frmThemDichVu frmThem = new frmThemDichVu(m_objConnection, m_objSecurityContext, m_objDichVuEntity);
				frmThem.setVisible(true);
			}
		});
		btnThem.setBounds(10, 11, 116, 38);
		contentPane.add(btnThem);

		JButton btnCapnhat = new JButton("Cập nhật");
		btnCapnhat.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				// Kiểm tra trạng thái entity
				if (m_objDichVuEntity == null) {
					m_objDichVuEntity = new DichVuEntitys();
				}
				// Thiết lập thông tin cho entity
				if (bFlag) {
					m_objDichVuEntity.setbFlag(true);
					m_objDichVuEntity.setMaDichVu(Integer.parseInt(String.valueOf(objDTM.getValueAt(jTLoadDataU.getSelectedRow(), 0))));
					m_objDichVuEntity.setTenDichVu(String.valueOf(objDTM.getValueAt(jTLoadDataU.getSelectedRow(), 1)));
					m_objDichVuEntity.setDonGia(Float.parseFloat(String.valueOf(objDTM.getValueAt(jTLoadDataU.getSelectedRow(), 2))));

					frmThemDichVu frmThem = new frmThemDichVu(m_objConnection, m_objSecurityContext, m_objDichVuEntity);
					frmThem.setLocation(400, 200);
					frmThem.setVisible(true);

					dispose();
				} else {
					JOptionPane.showMessageDialog(getParent(), "Yêu cầu chọn thông tin cần cập nhật", "Thông báo",
							JOptionPane.WARNING_MESSAGE);
				}
			}
		});
		btnCapnhat.setBounds(152, 11, 89, 38);
		contentPane.add(btnCapnhat);

		JButton btnXoa = new JButton("Xóa");
		btnXoa.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				int opt = JOptionPane.showConfirmDialog(getParent(), "Bạn có chắc chắn muốn xóa dữ liệu này?",
						"Thông báo", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null);
				if (opt == 0) {
					// Yes
					int maDichVu = Integer.parseInt(String.valueOf(objDTM.getValueAt(jTLoadDataU.getSelectedRow(), 0)));

					boolean bResult = false;
					try {
						DichVuEntitys objEntity = new DichVuEntitys();
						objEntity.setMaDichVu(maDichVu);
						bResult = m_objDichVuController.ExecOfDeleteElement(objEntity);
					} catch (Exception e) {
						JOptionPane.showMessageDialog(getParent(), "Lỗi xóa hóa đơn!", "Thông báo",
								JOptionPane.ERROR_MESSAGE);
					}

					if (bResult) {
						JOptionPane.showMessageDialog(getParent(), "Xóa tài khoản thành công!", "Thông báo",
								JOptionPane.ERROR_MESSAGE);

						// Thực thi hiển thị dữ liệu
						LoadData(true);
					} else {
						JOptionPane.showMessageDialog(getParent(), "Xóa tài khoản thành công!", "Thông báo",
								JOptionPane.ERROR_MESSAGE);
					}
				}
			}
		});
		btnXoa.setBounds(265, 11, 106, 38);
		contentPane.add(btnXoa);

		JButton btnLamtuoi = new JButton("Làm tưoi");
		btnLamtuoi.setBounds(395, 11, 106, 38);
		contentPane.add(btnLamtuoi);

		JButton btnFile = new JButton("Ghi xuống file");
		btnFile.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Object[] options = { "XML File", "JSON File", "Hủy bỏ" };
				int n = JOptionPane.showOptionDialog(getParent(), "Hãy chọn loại File bạn muốn ghi: ",
						"Chọn thể lại File", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null,
						options, options[1]);
				if (n == 0) {

					JOptionPane.showMessageDialog(getParent(), "Ghi XML thành công!");
				} else if (n == 1) {
					JOptionPane.showMessageDialog(getParent(), "Ghi JSon thành công!");
				}
			}
		});
		btnFile.setBounds(525, 11, 127, 38);
		contentPane.add(btnFile);

		JButton btnDong = new JButton("Đóng");
		btnDong.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				dispose();
			}
		});
		btnDong.setBounds(678, 11, 101, 38);
		contentPane.add(btnDong);

	JScrollPane scrollPane = new JScrollPane();
	scrollPane.setBounds(10, 60, 769, 368);
	contentPane.add(scrollPane);

	jTLoadDataU = new JTable();
	jTLoadDataU.addMouseListener(new MouseAdapter() {
		@Override
		public void mouseClicked(MouseEvent arg0) {
			bFlag = true;
		}
	});
	jTLoadDataU.setFont(new Font("Cambria", Font.PLAIN, 13));
	jTLoadDataU.setFillsViewportHeight(true);
	jTLoadDataU.setColumnSelectionAllowed(true);
	jTLoadDataU.setCellSelectionEnabled(true);
	jTLoadDataU.setBorder(null);
	scrollPane.setViewportView(jTLoadDataU);

	// Hiển thị dữ liệu lên JTable
	LoadData(true);

}

private void LoadData(boolean typeData) {
	// TODO Auto-generated method stub
	try {
		// 1. Kiểm tra trạng thái kết nối
		if (!m_objConnection.isClosed()) {
			ResultSet objRS = null;
			if (typeData) {
				// 2. Thực thi nhận ve tập bản ghi Users
				if (m_objDichVuController == null) {
					m_objDichVuController = new DichVuControllers(m_objConnection, m_objSecurityContext);
				}
				try {
					objRS = m_objDichVuController.ExecOfGetElements();
				} catch (Exception e) {
					JOptionPane.showMessageDialog(getParent(), "Err: " + e, "Thông báo", JOptionPane.ERROR_MESSAGE);
				}
			}
			// 3. Khai báo khởi tạo đối tượng
			Controls objControls = new Controls();

			// 4. Thực thi phương thức getModels để nhận ve
			// DefaulTableModels
			try {
				objDTM = objControls.getModels(objRS);
			} catch (Exception e) {
				System.out.println(e.getMessage());
			}
			jTLoadDataU.setModel(objDTM);

		} else {
			JOptionPane.showMessageDialog(getParent(), "Không kết nối được với CSDL!", "Thông báo",
					JOptionPane.ERROR_MESSAGE);
		}
	} catch (SQLException ex) {
		JOptionPane.showMessageDialog(getParent(), "Có lỗi xảy ra. Chi tiết: " + ex.getMessage(), "Thông báo",
				JOptionPane.ERROR_MESSAGE);
	}
}
}

